From: Florian Müllner Date: Thu, 23 Jan 2014 16:51:44 +0000 (-0500) Subject: shell-app: Unref running state when window count drops to zero X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~2883 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=73f6e75d8dd6219ff8bf0f8b210c7174e0898e77;p=gnome-shell.git shell-app: Unref running state when window count drops to zero With the lastest ShellApp changes, an app is considered stopped when the last "interesting" window is closed. However the app may still track non-interesting windows, so if we unref the running state on the state transition, we hit an assertion later-on when trying to remove the non-interesting window. Fix this by keeping the running state around until the last window is closed. https://bugzilla.gnome.org/show_bug.cgi?id=722840 --- diff --git a/src/shell-app.c b/src/shell-app.c index 83b96c144..9dabeba88 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -891,12 +891,6 @@ shell_app_state_transition (ShellApp *app, state == SHELL_APP_STATE_STARTING)); app->state = state; - if (app->state == SHELL_APP_STATE_STOPPED && app->running_state) - { - unref_running_state (app->running_state); - app->running_state = NULL; - } - _shell_app_system_notify_app_state_changed (shell_app_system_get_default (), app); g_object_notify (G_OBJECT (app), "state"); @@ -1058,6 +1052,9 @@ _shell_app_remove_window (ShellApp *app, if (app->running_state->interesting_windows == 0) shell_app_state_transition (app, SHELL_APP_STATE_STOPPED); + if (app->running_state && app->running_state->windows == NULL) + g_clear_pointer (&app->running_state, unref_running_state); + g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0); }